# -*-coding:utf-8 -*-
'分页数据爬取存入MySQL'

# 第一步，找到要爬取的网页地址，并找到每页相同点和不同点
# http://www.yingjiesheng.com/commend-fulltime-1.html
import time
import requests
from lxml import etree
import pymysql


def getPageInfo():
    # 这里的{}是预留后期替换的
    url = 'http://www.yingjiesheng.com/commend-fulltime-{}.html'
    # 测试的时候，分页信息就写少一点，比如，就写个2 3页
    # 有的网站有反爬机制，如果你频繁地爬取某个网站的信息，会被对方监控到后阻止你后续的访问
    # 这个时候爬虫代码就会终止报错
    # 这个时候，我们就需要在代码里面写一些睡眠或者暂停来缓解频繁爬取数据的行为
    result = []
    for i in range(1, 3):  # 1,2
        # 把{}替换成i
        url = url.format(i)
        response = requests.get(url=url)
        response.encoding = 'gbk'
        tree = etree.HTML(response.text)
        list = tree.xpath("//table[@class='jobul']/tr")
        for li in list:
            text1 = li.xpath("./td/a/text()")
            text2 = li.xpath("./td/span/text()")
            if len(text1) != 2 or len(text2) != 2:
                # 这里是出错（最后的时候）的情况
                print(text1, text2)
                continue
            else:
                cName = text1[0]
                jobname = text1[1]
                address = text2[0]
                publish_Date = text2[1]
                # result += cName + ";" + jobname + ";" + address + ";" + publist_Date + "\n"
                add_info = {
                    'name': cName,
                    'job': jobname,
                    'address': address,
                    'publish_date': publish_Date
                }
                result.append(add_info)
        time.sleep(2)  # sleep()睡眠函数，参数为睡眠时间，单位秒
    return result


# 创建MySQL连接函数（当做固定）
def getMysqlConn():
    conn = pymysql.connect(host='localhost',
                           port=3306,
                           user='root',
                           password='tang74702992',
                           db='scau',
                           charset='utf8')
    # 创建操作的游标
    cursor = conn.cursor()
    # 设置字符编码及自动提交
    cursor.execute('set names utf8')  # 固定格式
    cursor.execute('set autocommit=1')
    # 设置自动提交
    return conn, cursor


# 保存数据（传入一个封装好的字典，在getPageInfo里面的result）
def savePageInfo(dict_data):
    conn, cursor = getMysqlConn()
    sql = "insert into jobs_info(name,job_name,address,publish_date) values(%s,%s,%s,%s)"
    for data in dict_data:
        # 封装成元组进行插入
        add_data = (data['name'], data['job'], data['address'],
                    data['publish_date'])
        # 这里会把sql语句中的%s替换掉
        cursor.execute(sql, add_data)
    print("mysql插入数据完成")
    # 关闭连接
    cursor.close()
    conn.close()


if __name__ == '__main__':
    # 先通过爬虫，获取相关的数据，存到dict_data里面
    dict_data = getPageInfo()
    # 调用保存函数，在此之前，先把MySQL连接打开
    savePageInfo(dict_data=dict_data)
